4.1.0 找出一个数组中出现次数最多是元素

1.先找出一个数组中各个元素出现的次数

(1).利用 hash 键值对存储

function most(arr) {
  let obj = {};
  for(let i=0;i<arr.length;i++){
    let k = arr[i]; 
    if(obj[k]){
      obj[k]++;
    }else{
      obj[k] = 1;
    }
  }
  // 再比较obj中键值最大的
  ......
  
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

(3).借助数组Array的reduce方法

function most(arr) {
  let max;
  let maxNum = 1;
  let newObj = arr.reduce(function(cal,value) {
    cal[value]? cal[value]++ : cal[value]=1;
    if(cal[value]>max) {
      max = value
      max++;
    }
    return cal;
  },{})
  return newObj;
}

or

function most(arr) {
  let max;
  let maxNum = 1;
  let newObj = arr.reduce(function(cal,value) {
    if (value in cal) {
      cal[value]++;
    }else {
      cal[value] = 1;
    }
    return cal;
  },{})
  return newObj;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

(4).利用ES6语法以及逗号运算符进行的代码优化,这个方法看起来代码量很少,但是理解起来却需要花费一定的功夫

  • 逗号运算符
let a = (1,2,3);
a
// 3
1
2
3
  • demo:
function most(arr) {
 let obj = arr.reduce((cal,v)=>(
  cal[v]++ || (cal[v] = 1),
  (cal.max = cal.max >= cal[v]? cal.max:cal[v]),
  (cal.key = cal.max > cal[v]? cal.key: v),
  cal
 ),
{})
return obj;
}

most([2,5,6,7,5,8,7])
// {2: 1, 5: 2, 6: 1, 7: 2, 8: 1, max: 2, key: 7}
1
2
3
4
5
6
7
8
9
10
11
12
13

2.找出一个数组中数值元素最大值

1.es6拓展运算符...
Math.max(...arr)

2.es5 apply(与方法1原理相同)

Math.max.apply(null,arr)  
or  
Math.max.call(null,...[1,5,6,9])

3.for循环

let max = arr[0];
for (let i = 0; i < arr.length - 1; i++) {
    max = max < arr[i+1] ? arr[i+1] : max
}

4.数组sort()

arr.sort((a, b) => {
    return  b - a
})
arr[0]

5.数组reduce

arr.reduce((a, b) => {
    return a > b ? a : b}
)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

参考